// login.js
import { setUserAuth, setTokenInfo, updateUserInfo, isLoggedIn, getUserInfo as getLocalUserInfo } from '../../utils/http'
import { userApi } from '../../services/api'

Page({
  data: {
    hasPhoneNumber: false,
    phoneNumber: '',
    userInfo: null,
    hasUserInfo: false,
    loginType: 'wechat', // 登录方式：wechat 或 phone 或 account
    verificationCode: '', // 验证码
    countdown: 0, // 倒计时
    canSendCode: true, // 是否可以发送验证码
    account: '', // 账号
    password: '', // 密码
  },
  
  onLoad() {
    // 检查是否已经登录
    if (isLoggedIn()) {
      const userInfo = getLocalUserInfo();
      if (userInfo.phone) {
        this.setData({
          hasPhoneNumber: true,
          phoneNumber: userInfo.phone
        });
        
        // 如果已经有手机号，自动跳转到首页
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/index/index'
          });
        }, 1000);
      }
    }
  },
  
  // 获取微信手机号
  getPhoneNumber(e) {
    // 用户拒绝授权
    if (!e.detail.code) {
      wx.showToast({
        title: '获取手机号失败',
        icon: 'none'
      });
      return;
    }
    
    // 显示正在获取提示
    wx.showLoading({
      title: '授权中...',
      mask: true
    });
    
    // 使用API服务调用获取手机号接口
    userApi.getPhoneNumber(e.detail.code)
      .then(res => {
        if (res.status === 200) {
          // 保存认证信息
          const authData = res.data;
          
          // 设置token信息，与用户信息分开存储
          setTokenInfo(authData.token, authData.randomKey);
          
          // 使用存储的token调用获取用户信息接口
          return userApi.getUserInfo().then(userInfoRes => {
            if (userInfoRes.status === 200) {
              const userInfo = userInfoRes.data;
              
              // 设置完整用户信息
              updateUserInfo({
                userId: authData.userId,
                userName: userInfo.userName || 'KSG用户',
                phone: userInfo.phone || '',
                headImg: userInfo.headImg || '',
                avatarUrl: userInfo.avatarUrl || userInfo.headImg || '',
                isAdmin: userInfo.isAdmin
              });
              
              this.setData({
                phoneNumber: userInfo.phone || '',
                hasPhoneNumber: !!userInfo.phone
              });
              
              return userInfo;
            } else {
              // 如果获取用户信息失败，也存储基本信息
              updateUserInfo({
                userId: authData.userId,
                userName: 'KSG用户'
              });
              throw new Error(userInfoRes.message || '获取用户信息失败');
            }
          });
        } else {
          throw new Error(res.message || '授权失败');
        }
      })
      .then(userInfo => {
        // 显示登录成功提示
        wx.showToast({
          title: '授权成功',
          icon: 'success',
          mask: true,
          duration: 1500,
          success: () => {
            // 延迟跳转到首页
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/index/index'
              });
            }, 1500);
          }
        });
      })
      .catch(err => {
        console.error('授权流程出错:', err);
        wx.showToast({
          title: err.message || '授权失败',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  // 获取用户信息（头像和昵称）
  getUserInfo(e) {
    if (e.detail.userInfo) {
      const wxUserInfo = e.detail.userInfo;
      this.setData({
        userInfo: wxUserInfo,
        hasUserInfo: true
      });
      
      // 更新用户信息，包含头像和昵称
      userApi.updateUserInfo({
        userName: wxUserInfo.nickName,
        headImg: wxUserInfo.avatarUrl
      })
      .then(res => {
        if (res.status === 200) {
          // 更新本地存储
          updateUserInfo({
            userName: wxUserInfo.nickName,
            avatarUrl: wxUserInfo.avatarUrl
          });
          
          wx.showToast({
            title: '获取信息成功',
            icon: 'success'
          });
        } else {
          wx.showToast({
            title: res.message || '更新信息失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        console.error('更新用户信息失败', err);
        wx.showToast({
          title: '更新信息失败',
          icon: 'none'
        });
      });
    } else {
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      });
    }
  },
  
  // 登录
  login() {
    if (!this.data.hasPhoneNumber) {
      wx.showToast({
        title: '请先获取手机号',
        icon: 'none'
      });
      return;
    }
    
    // 显示登录中
    wx.showLoading({
      title: '登录中...',
      mask: true
    });
    
    // 构建用户信息对象
    const userInfo = {
      nickName: this.data.userInfo ? this.data.userInfo.nickName : 'KSG用户',
      avatarUrl: this.data.userInfo ? this.data.userInfo.avatarUrl : '',
      phone: this.data.phoneNumber
    };
    
    // 发送登录请求到服务器
    wx.request({
      url: 'https://api.example.com/login', // 替换为实际接口地址
      method: 'POST',
      data: {
        phoneNumber: this.data.phoneNumber,
        userInfo: this.data.userInfo
      },
      success: (res) => {
        if (res.data.success) {
          // 设置认证和用户信息
          setUserAuth({
            userId: res.data.userId || '5382719',
            token: res.data.token || 'dummy-token',
            randomKey: res.data.randomKey || 'dummy-key',
            userName: userInfo.nickName,
            phone: userInfo.phone,
            avatarUrl: userInfo.avatarUrl
          });
          
          // 显示登录成功提示
          wx.showToast({
            title: '登录成功',
            icon: 'success',
            mask: true,
            duration: 1500,
            success: () => {
              // 延迟返回上一页
              setTimeout(() => {
                wx.navigateBack();
              }, 1500);
            }
          });
        } else {
          wx.showToast({
            title: res.data.message || '登录失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('登录请求失败', err);
        wx.showToast({
          title: '登录失败',
          icon: 'none'
        });
      },
      complete: () => {
        wx.hideLoading();
      }
    });
  },
  
  // 显示用户协议
  showUserAgreement() {
    wx.showModal({
      title: '用户协议',
      content: '感谢您使用KSG小程序。本协议描述了您在使用我们的服务时，我们将如何收集、使用和共享您的相关信息，以及我们为您提供的隐私保护措施。',
      confirmText: '我知道了',
      showCancel: false
    });
  },
  
  // 显示隐私政策
  showPrivacyPolicy() {
    wx.showModal({
      title: '隐私政策',
      content: '尊敬的用户，欢迎使用KSG汽车膜小程序。\n\n途盾新材料科技（上海）有限公司（以下简称"我们"）深知个人信息对您的重要性，我们将按照法律法规要求保护您的个人信息及隐私安全。\n\n我们收集的信息：\n1. 手机号：用于账号登录、服务通知及客户服务\n2. 照片/视频访问权限：用于上传车辆照片及施工效果展示\n3. 摄像头权限：用于拍摄车辆照片及扫描二维码\n4. 剪贴板权限：用于复制公众号ID等内容\n\n我们承诺依法对收集的信息严格保密，不会将您的信息用于本政策未载明的其他用途。如您对本政策有任何疑问，请联系我们的客服。',
      confirmText: '我知道了',
      showCancel: false,
      confirmColor: '#07c160'
    });
  },
  
  // 跳转到公众号
  followOfficialAccount() {
    wx.showToast({
      title: '即将跳转公众号',
      icon: 'none',
      duration: 1500
    });
    
    // 复制公众号 ID 到剪贴板
    wx.setClipboardData({
      data: 'KSG汽车膜',
      success: function() {
        wx.showModal({
          title: '提示',
          content: '公众号ID已复制，请在微信中搜索并关注"KSG汽车膜"公众号',
          showCancel: false
        });
      }
    });
  },

  // 切换登录方式
  switchLoginType(e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      loginType: type
    });
  },

  // 输入手机号
  inputPhoneNumber(e) {
    const phoneNumber = e.detail.value;
    this.setData({
      phoneNumber,
      canSendCode: phoneNumber.length === 11
    });
  },

  // 输入验证码
  inputVerificationCode(e) {
    this.setData({
      verificationCode: e.detail.value
    });
  },

  // 发送验证码
  sendVerificationCode() {
    if (!this.data.canSendCode || this.data.countdown > 0) return;
    
    const phoneNumber = this.data.phoneNumber;
    if (!/^1[3-9]\d{9}$/.test(phoneNumber)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      });
      return;
    }

    // 显示发送中
    wx.showLoading({
      title: '发送中...',
      mask: true
    });

    // 调用发送验证码接口
    userApi.sendVerificationCode(phoneNumber)
      .then(res => {
        if (res.status === 200) {
          wx.showToast({
            title: '验证码已发送',
            icon: 'success'
          });
          
          // 开始倒计时
          this.setData({
            countdown: 60,
            canSendCode: false
          });
          
          this.startCountdown();
        } else {
          throw new Error(res.message || '发送失败');
        }
      })
      .catch(err => {
        console.error('发送验证码失败:', err);
        wx.showToast({
          title: err.message || '发送失败',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },

  // 倒计时
  startCountdown() {
    const timer = setInterval(() => {
      if (this.data.countdown <= 1) {
        clearInterval(timer);
        this.setData({
          countdown: 0,
          canSendCode: true
        });
        return;
      }
      
      this.setData({
        countdown: this.data.countdown - 1
      });
    }, 1000);
  },

  // 手机号登录
  phoneLogin() {
    const { phoneNumber, verificationCode } = this.data;
    
    if (!phoneNumber || !verificationCode) {
      wx.showToast({
        title: '请填写完整信息',
        icon: 'none'
      });
      return;
    }

    if (!/^1[3-9]\d{9}$/.test(phoneNumber)) {
      wx.showToast({
        title: '请输入正确的手机号',
        icon: 'none'
      });
      return;
    }

    if (!/^\d{6}$/.test(verificationCode)) {
      wx.showToast({
        title: '请输入正确的验证码',
        icon: 'none'
      });
      return;
    }

    // 显示登录中
    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    // 调用手机号登录接口
    userApi.phoneLogin({
      phone: phoneNumber,
      code: verificationCode
    })
      .then(res => {
        if (res.status === 200) {
          const authData = res.data;
          
          // 设置token信息
          setTokenInfo(authData.token, authData.randomKey);
          
          // 获取用户信息
          return userApi.getUserInfo().then(userInfoRes => {
            if (userInfoRes.status === 200) {
              const userInfo = userInfoRes.data;
              
              // 设置用户信息
              updateUserInfo({
                userId: authData.userId,
                userName: userInfo.userName || 'KSG用户',
                phone: userInfo.phone || phoneNumber,
                headImg: userInfo.headImg || '',
                avatarUrl: userInfo.avatarUrl || userInfo.headImg || '',
                isAdmin: userInfo.isAdmin
              });
              
              return userInfo;
            } else {
              // 如果获取用户信息失败，也存储基本信息
              updateUserInfo({
                userId: authData.userId,
                userName: 'KSG用户',
                phone: phoneNumber
              });
              throw new Error(userInfoRes.message || '获取用户信息失败');
            }
          });
        } else {
          throw new Error(res.message || '登录失败');
        }
      })
      .then(() => {
        // 显示登录成功提示
        wx.showToast({
          title: '登录成功',
          icon: 'success',
          mask: true,
          duration: 1500,
          success: () => {
            // 延迟跳转到首页
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/index/index'
              });
            }, 1500);
          }
        });
      })
      .catch(err => {
        console.error('登录失败:', err);
        wx.showToast({
          title: err.message || '登录失败',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },

  // 输入账号
  inputAccount(e) {
    this.setData({
      account: e.detail.value
    });
  },

  // 输入密码
  inputPassword(e) {
    this.setData({
      password: e.detail.value
    });
  },

  // 账号+密码登录
  accountLogin() {
    const { account, password } = this.data;
    
    if (!account || !password) {
      wx.showToast({
        title: '请填写完整信息',
        icon: 'none'
      });
      return;
    }

    if (account.trim().length < 3) {
      wx.showToast({
        title: '账号长度不能少于3位',
        icon: 'none'
      });
      return;
    }

    if (password.length < 6) {
      wx.showToast({
        title: '密码长度不能少于6位',
        icon: 'none'
      });
      return;
    }

    // 显示登录中
    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    // 调用账号+密码登录接口
    userApi.pwdLogin({
      account: account.trim(),
      pwd: password
    })
      .then(res => {
        if (res.status === 200) {
          const authData = res.data;
          
          // 设置token信息
          setTokenInfo(authData.token, authData.randomKey);
          
          // 获取用户信息
          return userApi.getUserInfo().then(userInfoRes => {
            if (userInfoRes.status === 200) {
              const userInfo = userInfoRes.data;
              
              // 设置用户信息
              updateUserInfo({
                userId: authData.userId,
                userName: userInfo.userName || 'KSG用户',
                phone: userInfo.phone || '',
                headImg: userInfo.headImg || '',
                avatarUrl: userInfo.avatarUrl || userInfo.headImg || '',
                isAdmin: userInfo.isAdmin
              });
              
              return userInfo;
            } else {
              // 如果获取用户信息失败，也存储基本信息
              throw new Error(userInfoRes.message || '获取用户信息失败');
            }
          });
        } else {
          throw new Error(res.message || '登录失败');
        }
      })
      .then(() => {
        // 显示登录成功提示
        wx.showToast({
          title: '登录成功',
          icon: 'success',
          mask: true,
          duration: 1500,
          success: () => {
            // 延迟跳转到首页
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/index/index'
              });
            }, 100);
          }
        });
      })
      .catch(err => {
        console.error('账号登录失败:', err);
        wx.showToast({
          title: err.message || '登录失败',
          icon: 'none'
        });
      })
  },
}) 